早些天不忙的时候看的入门,从有道云笔记搬过来的
简介
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
Docker的应用场景
- Web 应用的自动化打包和发布。
- 自动化测试和持续集成、发布。
- 在服务型环境中部署和调整数据库或其他的后台应用。
- 从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS环境。
Docker的优点
- 简化程序:Docker 让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,便可以实现虚拟化。Docker改变了虚拟化的方式,使开发者可以直接将自己的成果放入Docker中进行管理。方便快捷已经是 Docker的最大优势,过去需要用数天乃至数周的 任务,在Docker容器的处理下,只需要数秒就能完成。
- 避免选择恐惧症:如果你有选择恐惧症,还是资深患者。Docker 帮你 打包你的纠结!比如 Docker 镜像;Docker 镜像中包含了运行环境和配置,所以 Docker 可以简化部署多种应用实例工作。比如 Web 应用、后台应用、数据库应用、大数据应用比如 Hadoop 集群、消息队列等等都可以打包成一个镜像部署。
- 节省开支:一方面,云计算时代到来,使开发者不必为了追求效果而配置高额的硬件,Docker 改变了高性能必然高价格的思维定势。Docker 与云的结合,让云空间得到更充分的利用。不仅解决了硬件管理的问题,也改变了虚拟化的方式。
Docker 架构
| 中文 | 英文 | 解释 |
|---|---|---|
| 镜像 | Docker Images | Docker 镜像是用于创建 Docker 容器的模板。 |
| 容器 | Docker Container | 容器是独立运行的一个或一组应用。 |
| 客户端 | Docker Client | Docker 客户端通过命令行或者其他工具使用 Docker API (查看API) 与 Docker 的守护进程通信。 |
| 主机 | Docker Host | 一个物理或者虚拟的机器用于执行 Docker 守护进程和容器。 |
| 仓库 | Docker Registry | Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。Docker Hub(查看镜像) 提供了庞大的镜像集合供使用。 |
| 工具 | Docker Machine | Docker Machine是一个简化Docker安装的命令行工具,通过一个简单的命令行即可在相应的平台上安装Docker,比如VirtualBox、 Digital Ocean、Microsoft Azure。 |
Ubuntu Docker 安装
使用脚本安装
下载最新的安装包
1 | hisen@hisen-pc:~$ wget -qO- https://get.docker.com/ | sh |
hello-world
1 | #启动 |
Docker 使用
1 | #启动某个指定的镜像,运行hello-world |
各个参数解析
docker run ubuntu:15.10 /bin/echo “Hello world”
| 参数 | 解释 |
|---|---|
| docker | Docker 的二进制执行文件 |
| run | 与前面的 docker 组合来运行一个容器 |
| ubuntu:15.10 | 指定要运行的镜像,Docker首先从本地主机上查找镜像是否存在,如果不存在,Docker 就会从镜像仓库 Docker Hub 下载公共镜像。 |
| /bin/echo “Hello world” | 在启动的容器里执行的命令 |
以上命令完整的意思可以解释为:Docker 以 ubuntu15.10 镜像创建一个新容器,然后在容器里执行 bin/echo “Hello world”,然后输出结果。
运行交互式的容器
1 | root@hisen-pc:/home/hisen# docker run -i -t ubuntu:15.10 /bin/bash |
-t:在新容器内指定一个伪终端或终端。
-i:允许你对容器内的标准输入 (STDIN) 进行交互。
启动容器(后台模式)
1 | root@hisen-pc:/home/hisen# docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done" |
后台启动完成,会返回一串容器的ID
1 | ##查看是否有容器启动 |
CONTAINER ID:容器ID(这里是:==8c2a84327360==)
NAMES:自动分配的容器名称
1 | ## 查看上面那个ID的容器的log |
Docker 客户端
docker 客户端非常简单 ,我们可以直接输入 docker 命令来查看到 Docker 客户端的所有命令选项。
1 | ## 调出帮助 |
运行一个WEB容器
运行一个 Python Flask 应用 来搭建一个web应用
1 | ## -d:让容器在后台运行。 |
0.0.0.0:32768->5000/tcp
docker使用的端口5000
映射到本地端口32768
本地可以访问:127.0.0.1:32768
1 | ## 访问:http://localhost:32768/ |
查看WEB应用程序日志
1 | ## 带上 -f 参数,动态输出日志 |
查看WEB应用程序容器的进程
1 | ## top后面是跟着id或者name |
检查WEB应用程序
1 | ## 会输出一大串JSON形式的字符串 |
WEB程序其他操作
1 | docker stop 0d68d3d4baf6 |
Docker 镜像使用
列出所有本地的镜像
1 | root@hisen-pc:/home/hisen# docker images |
其他命令
1 | ## 获取一个镜像 |
构建一个全新的镜像
新建一个配置文件:Dockerfile,并添加内容
每个指令都会在镜像上创建一个新的层
每一个指令的前缀都必须是大写的。
第一条FROM,指定使用哪个镜像源
RUN 指令告诉docker 在镜像内执行命令,安装了什么
1 | root@hisen-pc:/home/hisen# vi Dockerfile |